from flask import request, abort, current_app, make_response
from . import passport_blu
from info.utils.captcha.captcha import captcha
from info import constants
from info import redis_store


@passport_blu.route('/image_code')
def get_image_code():
    """
    生成图片验证码并返回
    1.取到参数
    2.判断是否有值
    3.生成图片验证码
    4.保存图片验证码文字内容到redis
    5.返回图片验证码
    :return:
    """
    # 1.   args去到url中 ？后面的参数
    image_code_id = request.args.get("imageCodeId", None)
    if not image_code_id:
        return abort(403)
    # 3.
    name, text, image = captcha.generate_captcha()
    # 4.
    try:
        redis_store.set("imageCodeId_" + image_code_id, text, constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        abort(500)
    # 5.
    response = make_response(image)
    # 设置数据的类型，以便使用大部分的浏览器区别图片类型
    response.headers["Content-Type"] = "image/jpg"
    return response






"""
图片验证的逻辑分析
1.浏览器要发送图片验证码请求/image_code?imageCode=xxxx
2.后端得有视图函数接收该请求
3.取到imageCodeID,生成图片验证码，将验证码的内容保存到redis中
    redis_store(imageCodeId, 验证内容)
4.返回图片给前端
"""